package com.mashuai.utils.toolkit.core.msCrudbean;

import com.mashuai.utils.base.MsIocUtils;
import com.mashuai.utils.toolkit.achieve.HandleDataUtilsCore;
import com.mashuai.utils.toolkit.core.msHandlebean.MsHandleDataUtils;
import com.mashuai.utils.toolkit.core.msHandlebean.dto.MsDelCheckDto;
import com.mashuai.utils.toolkit.core.msHandlebean.dto.MsSaveCheckDto;

import java.util.List;

/**
 * crud执行前的一些拦截操作
 */
public interface IMsCrudInvoke {
    /**
     * 删除前进行数据是否被其他表引用检验
     *
     * @param list     数据id集合
     * @param clazz
     * @param throwMsg
     * @return
     * @author mashuai
     */

    default List<MsDelCheckDto> invokeDelCheck(List list, Class<?> clazz, boolean throwMsg) throws Exception {
        return MsHandleDataUtils.handleDelCheck(list, clazz, throwMsg);
    }

    /**
     * 保存前，判断数据是否存在必填字段检验，比如code、name不能重复
     *
     * @param m
     * @param throwMsg
     * @return
     * @author mashuai
     */

    default List<MsSaveCheckDto> invokeSaveCheck(Object m, boolean throwMsg) throws Exception {
        return MsHandleDataUtils.handleSaveCheck(m, throwMsg);
    }

    /**
     * 查询结果后，处理结果中的字典值、需要left join带出的数据
     *
     * @param list
     * @param clazz
     * @return
     * @author mashuai
     */

    default void invokeHandleFindData(List list, Class<?> clazz) {
        MsHandleDataUtils.handleTbOrDictValBeans(list, clazz);
    }
}
